<?php
declare (strict_types = 1);

namespace app\model\communal;

use think\Model;
use think\db\Query;
use think\model\relation\HasMany;

class RegionModel extends Model
{

    // 省市区级别
    const LEVEL_ONE = 1; // 省
    const LEVEL_TWO = 2; // 市
    const LEVEL_THREE = 3; // 区

    /**
     * 数据库配置
     *
     * @var string
     */
    protected $connection = 'communal';

    /**
     * 主键
     *
     * @var string
     */
    protected $pk = 'code';

    /**
     * 表名
     *
     * @var string
     */
    protected $table = '91000_region';

    /**
     * 展示字段名
     *
     * @var string[]
     */
    public static $column = ['code', 'p_code', 'name'];

    /**
     * 搜索字段名
     *
     * @var string[]
     */
    public static $searchColumn = ['code', 'p_code', 'name'];

    /**
     * 新增字段
     *
     * @var string[]
     */
    public static $saveColumn = ['code', 'p_code', 'name'];

    /**
     * 更新字段
     *
     * @var string[]
     */
    public static $updateColumn = [''];

    /**
     * 排序字段名
     *
     * @var string[]
     */
    public static $orderColumn = ['code'];

    /**
     * name 搜索
     *
     * @param Query $query
     * @param $value
     */
    public function searchNameAttr($query, $value)
    {
        if (!is_null($value) && strlen($value) > 0) {
            $query->where('name', 'like', $value . '%');
        }
    }

    /**
     * code搜索
     *
     * @param Query $query
     * @param $value
     */
    public function searchCodeAttr($query, $value)
    {
        if (!is_null($value) && strlen($value) > 0) {
            $query->where('code', $value);
        }
    }

    /**
     * p_code搜索
     *
     * @param Query $query
     * @param $value
     */
    public function searchPCodeAttr($query, $value)
    {
        if (!is_null($value) && strlen($value) > 0) {
            $query->where('p_code', $value);
        }
    }

    /**
     * 关联children
     *
     * @return HasMany
     */
    public function children()
    {
        return $this->hasMany(RegionModel::class, 'p_code', 'code');
    }
}
